package com.cn.wanxi.util;

public class ReadMe {
    /**
     * 2021-11-8
     * 第四阶段：任务描述：写一个后台管理系统
     * 要求：对数据进行控制，对前端页面的数据来源于数据库
     * -------------------------------------------------------
     * 第一：数据库(仓库)
     * 任何一门技术都要从以下几个方面来学？
     * 1）是什么？
     * 用来存储数据的地方。
     * 2）有什么用？为什么要学？
     * 可以将大量的数据按照一定的规则进行存储(编号)
     * 因为所有系统都需要保存数据 （数据为王）
     * 买丰田车  买发动起送车
     * 特斯拉 其实是卖系统的（生态自动驾驶）数据
     * 苹果 其实是卖系统 软件的成本 虚拟的  边际成本（人越多，边际成本越少）抓用户
     * 谷歌  其实卖系统
     * 腾讯
     * 公司要用？
     * 学：关系型数据库和非关系型数据库
     * 3）应用场景？面试的时候经常会问
     * 4）怎么做？
     * 1.软件安装
     * jdk版本  jdk1.0   jdk1.5  jdk6 jdk 7 jdk16
     * 密码全部写123456  用户名全部写root
     * 如果安装失败：一般情况下会在安装服务的时候失败 ,
     * 失败怎么办？卸载重载
     * 1）卸载的时候不要直接删除MySQL文件夹，而用软件删除
     * 2）删除注册表 win+r   输入regedit 打开注册表 然后ctrl+f 搜索MySQL  去删除
     * 3）一定要重启电脑  然后再次安装
     * 不用配置环境变量
     * 环境变量有什么用？ 简化操作步骤
     * 因为以后全部都是通过数据库可视界面软件进行数据操作
     * 面试官会问？你接触过哪些可视化数据库管理软件？
     * Navicat 中文的  根据自己喜好
     * workbench  英文的  MySQL自带 兼容所有 推荐用
     * SQLyog
     * 建议大家用英文
     * ----------------------------------------
     * 连接数据库
     * 如果没有找到workbench
     * 点击 mysql-installer   点击add  选择需要安装的软件 添加到右边 点击next继续安装
     * -----------------------------------------------
     * 点击workbench的+创建连接
     * 1）输入连接名称  随便取，只要自己认识就好
     * 2)hostname 地址   本地可以写：127.0.0.1 或者localhost  远程只能写地址
     * 3）port 端口 默认3306  可以为其他端口 但是需要设置
     * 4）用户名 root  用户登录的名称
     * 5）密码  123456
     * 点击test测试连接 成功点击ok
     * --------------------------------------
     * 1）如果想让别人访问我们自己的数据库怎么办？
     *  192.168.0.111
     *  root
     *  123456
     *  需要给别人权限：
     *  点击：administration 选择 users and privileges
     *  添加一个账号（别人用于登陆自己数据库的子账号）
     *  一般不直接将自己的用户名和密码给别人 因为不安全
     *  add  account添加账号
     *  登录名 ：随便取，最好是英文（因为中文会有乱码）aaaa
     *  不用管类型 默认标准
     *  limit to hosts matching  限制匹配的地址
     *  192.168._.%  _表示只能有一个数字 取值范围 0-9
     *  %取值范围：0-255
     *  password 最好不要和自己原始密码一至：
     *  点击apply 提交
     *  ----------------------------------- 前面知识分配了一个账号
     *  下面给该账号分配权限
     *   点击 privileges  添加add entry，选择权限 进行添加 apply
     *   -------------------------
     *   第四阶段：第一节课
     *   1.mysql的安装
     *   2.可视化界面的安装
     *   3.权限分配
     *   4.数据库连接
     *   ---------------------------------------
     *   先预习js 的用法
     *
     */
    /**
     * 2021-11-9
     * -- 创建数据库
     * # 创建数据库
     * -- 创建数据库的原则： 创建几个数据库？为什么要创建多个数据库？可以直接创建数据库吗？数据库的命名规范？
     * -- 项目小--数据量比较小， 创建一个数据库
     * -- 如果想创建多个数据库 ，标示 用户想把数据分开
     * -- 数据库---》表--》字段
     * -- 数据库的名称怎么命名？一般情况下和自己的项目一致；
     * CREATE SCHEMA `new_schema` ;
     * CREATE database `new_schema` ;
     * CREATE SCHEMA `canyin_user` DEFAULT CHARACTER SET utf8 ;
     * CREATE SCHEMA `canyin` DEFAULT CHARACTER SET utf8 ;
     * CREATE SCHEMA `canyin_order` DEFAULT CHARACTER SET utf8 ;
     * CREATE SCHEMA `canyin_news` DEFAULT CHARACTER SET utf8 ;
     * -- table 表 存储数据
     * -- views 视图  临时表  （查询）
     * -- stored procedures 存储过程  自定义类 方法 属性
     * -- functions  方法 函数  mysql 自己的方法 或者可以单独写方法  写触发器
     * -- 存储过程为什么不用了？
     * ------------------------------------------------------------------------------------------
     * -- 表创建的方式？有没有什么原则？命名？ 表的 作用？
     * create schema canyin;
     * CREATE SCHEMA `SCHEMA`;
     * -- 没有任何区别  只是 MySQL 默认关键字大写  MySQL是否区分大小写？不区分
     * -- 这个`的意思是避免使用到关键字
     *  -- new_table表名 标示MySQL 如果有多个单子组成的名字 用下划线
     *  -- java命名规范  类名，方法名，常量名，字段名 枚举，接口，抽象 注解
     *  -- engine 存储引擎  innodb
     *  -- 存储引擎 innodb和myisam的区别？
     *  -- 创建数据库的三大范式alter
     *  -- 1.原子性 不可再分 最小原则
     *  -- 如果第二阶段把对象弄好了，则第四阶段表和第二阶段的model层相互一一对应
     *  -- 用户 user ：地址：address 公司地址 ，家庭地址，老家地址，
     *  -- 2.唯一性
     *  -- 主键：一个表唯一能够标示当前数据的特点
     *  -- 当前表的列不能包含其他对象的属性或者表的列
     *  -- 表与表的关系？ Java  对象与对象之间的关系？
     *  -- 一对一 一对多  多对一 多对多
     *  -- 3.冗余性 不存在依赖关系
     *  -- 对象与对象之间的关系？类于类之间的关系？
     *  --  还要遵循五大约束
     *  --------------------------------------------------
     *  -- 1.创建表的时候首先创建一个主键id
     *  -- 2.其他列和model里面的列一致，将驼峰式命名修改为下划线命名即可marketPrivce  修改成market_privce
     *  -- 3.每个表里面建议统一新建字段名  id主键id，create_time创建时间,update_time更新时间,enable是否可用,remark备注;
     *
     *  -- 一个表里面可用有多个主键  联合主键
     *  -- 要字段Java数据类型的取值范围
     *  -- Java的数据类型的字节数 byte short
     *  -- Java  的id建议用int
     *  -- VARCHAR(45) 和char(45)的区别？ 并不是说char一点优势都没有？他们的作用范围？
     *  -- char 一般在字段长度固定的情况下用
     *  -- text  文本
     * ------------------------------------
     * 1.创建数据库
     * 2.创建表三大范式五大约束
     * 3.数据类型  int  char varchar  text  字符文本
     */
    /**
     * 2021-11-10
     * -- DATETIME 日期
     * -- TIMESTAMP 和 DATETIME 的区别？
     * -- 1.时间范围不同
     * -- 2.存储方式不同
     * -- 3.存储空间不同 TIMESTAMP占4个字节 DATETIME占8个字节
     * -- 获取系统当前时间？
     * select now();
     * select sysdate();
     * select CURRENT_TIMESTAMP();
     * -- 如果想存公元前200年应该用什么字段？ 统一用varchar字符
     *
     * -- TINYINT 对于mysql 如果是布尔， ，取值范围？ 0-255
     * -- 状态 states 1可收货  2已确认  3 未付款等
     * -- 只想得到年月日?
     * select now();  -- MySQL 日期格式化  Java 里面也有日期格式化
     * select DATE_FORMAT(now(),'%Y/%m/%d')  date ;
     * -- 日期格式话 DATE_FORMAT
     * -- 设置别名 as 或者省略
     * -- 创建表
     * use canyin;
     * CREATE TABLE `user` (
     *   `id` INT NOT NULL AUTO_INCREMENT,
     *   `username` VARCHAR(45) NULL COMMENT '一般情况下用户名 ：4到16位',
     *   `password` VARCHAR(45) NULL COMMENT '密码用char 32位',
     *   `phone` VARCHAR(45) NULL,
     *   `address` VARCHAR(45) NULL,
     *   `birthday` DATE NULL COMMENT 'DATETIME',
     *   `create_time` TIMESTAMP(4) NULL ,
     *   `update_time` TIMESTAMP(4) NULL,
     *   `enable` TINYINT NULL DEFAULT 1,
     *   `remark` VARCHAR(45) NULL DEFAULT '',
     *   `introduce` TEXT NULL ,
     *   PRIMARY KEY (`id`));
     *   -- 修改表列？alter
     * alter table user change create_time create_time timestamp not null default now();
     * -- 我想让创建时间默认为系统当前时间 ？
     * DROP DATABASE `schema`; -- 删除数据库
     * DROP TABLE `canyin`.`user`;-- 删除表
     * INSERT INTO `user`
     * (`username`, `password`, `phone`, `address`,
     *  `birthday`, `update_time`,
     *  `enable`, `remark`, `introduce`)
     *  VALUES
     *  ('1', '1', '1', '1',
     *  '2021-11-11', '2021-11-11',
     *  '1', '1', '1');
     *  -- 数据新增  id 自动增长  为最大的id+1
     *  delete from user where id=12;  -- 删除表里面的某一条数据  删除后 保留 历史数据暂用的空间
     *  truncate user;-- 删除表所有内容  删除所有的空间
     *  drop table user; -- 删除表
     *  -- drop 和  truncate 和 delete 的区别？
     *  -- 修改數據
     * UPDATE `user` SET
     * `username` = '2',
     * `password` = '2',
     *  `phone` = '2',
     *  `address` = '2',
     *  `update_time` = '2021-11-12',
     *  `remark` = '22',
     *  `introduce` = '22'
     *  where id=2
     * ;
     * -- DECIMAL(5,2) 小数 5代表有效数字，2代表小数  4.53
     * -- 如果存在money 价钱的时候 用 DECIMAL
     * -- 数据库用DECIMAL那么Java用 BigDecimal对应
     * -- 每个对象都对应一个表 每个对象都应该包含 id，craeteTime，updateTime,enable,remark;
     * -- 第四阶段 如果 你们的表里面有和其他表相关联的 直接用 其他表里面的id
     * -- 如产品表 product 里面有一个菜系id，cuisine_id
     * -- 所有的数据 最好不要手动输入到数据库，到时我们通过后台管理系统进行添加
     * -- <>  !=不等于
     *
     * -- select * from user where username='xxxxxx' or password='aaaaaa';
     *
     * -- select * from product where  price >=231 and price<=500;
     * -- select * from product  where price between 231 and 500;
     * -- select * from product where id not in (1,3,7);
     * -- 以后少用或者不用not in   所以 用in
     * 对于零基础的同学：
     * 将你们自己的Java第二阶段的所有提取的对象进行建表
     */
    /**
     * 2021-11-11
     * ----------------------------------------------------
     * -- 建表 model和表名一致
     * -- model里面的属性和表名里面的列名一致   只不过一个小驼峰 一个全小写加_下划线
     * -- model里面的数据类型和表里面的数据类型相互对应
     * -- Java    					 mysql
     * -- Integer/Byte/Short  		 int
     * -- String    				varchar
     * -- BigDecimal 				decemal
     * -- Long	（毫秒）			bigInt
     * -- Integer					tinyint
     * -- 	String（Date最好不用）	datetime
     * -- 无论Java传递给数据库 还是前端传递给Java 都是以字符串的形式进行传递
     * -----------------------------------------------------------------
     * -- 模糊查询
     * select * from user ;
     * select * from user  where username like 'df%';
     * -- 'df%' 以df开始 后边可以跟任何字符
     * -- '%df' 以df结尾，前边可以跟任何字符
     * -- '%df%' 列里面包含df即可
     * select * from user where username like '%a%' or realname like '%b%';
     * select * from user where username like 'a_';-- 两个字
     * select * from user where username like 'a__';-- a开头 后面两个字符
     * select * from user where username regexp '[hd]g'; -- REGEXP 正则表达式
     * select * from user where username regexp '[^hd]g';
     * select * from user where username regexp '[h^d]g';-- 这个用户名里面可以包含 这三个数的字符
     * select * from user where username regexp '[h^d]g' and address like '%武侯区%';
     *
     *
     * select * from user order by username ; -- 升序  从小到大
     * select * from user order by username desc;-- 降序  默认升序排序
     * select sex from user group by sex; -- 分组
     * -- 收到客户端{pageNo:1,pagesize:10}
     * -- select * from table limit (pageNo-1)*pageSize, pageSize;
     * -- select * from user limit (1-1)*10,10; -- 分页不支持运算符，需要计算结果
     * select * from user limit 10,10;
     * select min(create_time) from user;
     * select count(create_time) from user;-- 切记 查询总条数的列必须不能为空
     * select id,username,date_format(create_time,'%Y-%m-%d') as create_time from user;
     * -- 产品 显示两条置顶 显示两条推荐 剩余显示其他数据
     * (SELECT * FROM canyin04.product where is_show=1 limit 2)
     * union
     * (SELECT * FROM canyin04.product where is_recommend=1 limit 2)
     * union
     * (SELECT * FROM canyin04.product where is_recommend!=1 and is_show!=1 limit 6);
     * SELECT * FROM product  p,cuisine c
     * where p.cuisine_id=c.id; -- 联合查询
     * -- 列名可以有别名  表名可以有别名
     * select * from product p
     * inner join cuisine c
     * on p.cuisine_id=c.id; -- 内连接
     *
     *
     * select * from product p
     * left join cuisine c
     * on p.cuisine_id=c.id; -- 左连接  以左边的表为基准，和右边的表相关联，如果没有关联，则用null代替
     * select * from product p
     * right join cuisine c
     * on p.cuisine_id=c.id; -- 右连接 以右边的表为基准，和左边的表相关联，如果没有关联，则用null代替
     *
     * select * from   cuisine c
     * right join product p
     * on p.cuisine_id=c.id;  -- 左连接和右连接可以相互转换
     * -- select -->from-->where -->group by-->having-->order by -->limit
     * -- 查询   来自于   当（条件） 分组    对分组设限   排序      分页
     */
    /**
     * 2021-11-12
     * 第四阶段  目的：做一个后台管理系统
     * 1.学会模仿别人的代码（观察别人的代码书写格式）
     * 2.能够拿到别人的代码进行修改
     * 3.代码量的提升
     * 4.有很多都是一样的，提炼你们的性格
     * 5.戒骄戒躁
     * ---------------------------------------------------
     * 第四阶段做项目的步骤：思路
     * 以后会在开发文档或者设计文档 或者需求文档 都有流程图
     * doget和dopost的区别？
     * servlet的生命周期？
     * 以后所有的查询默认get
     * 所有的更新默认post（新增，修改，删除）
     * 对于Java来说不需要大家能够书写正则表达式，要学会复制粘贴
     * 说明html里面拿不到后台转发过来的值,只能是jsp
     * form表单  action="/login" 这种方式 不能用于提交信息，因为无法发送数据到前端
     * 所以这里需要用到ajax
     * ----------------------------------------
     * Java项目思路
     * 1.前端
     *      1）写页面
     *      2）输入信息
     *      3）判断是否输入正确
     *      4）提交给Java后台
     * 2.Java后台
     *      1）得到前端信息
     *      2）写逻辑代码 servlet --》service --》dao --》JDBC（连接数据库）
     *      3）根据逻辑代码返回给前端数据
     */
    /**
     * 2021-11-15
     * 类的组成部分：
     * 1.包
     * 2.类名 大驼峰
     * 3.属性  变量类型
     * 1）全局变量  只要是紧跟类下面的变量
     * 2）局部变量 在方法里面的变量
     * 3）类变量（静态变量） 用static修饰的变量
     * 4）实例变量 没有用static修斯和的变量
     * 4.方法
     * 5.构造方法 主要目的，创建对象 供别人调用
     * 6.代码块
     * ----------------------------------------------
     * 数据类型  ---》基本（内置）数据类型和引用
     * 基本数据类型 8种  范围，字节数，默认值
     * 抽象类
     * 接口
     * 封装  Tool  IOTool类
     *----------------------------------------------------------
     * 后端返回给前端时，需要将对象强制转换为json对象
     * 由三种方式：fastjson  jacson  gson
     * 以后所有的项目：都需要前后的进行相互传值
     * 规定 所有传值都需要通过json对象的形式进行传递
     * ---------------------------------------------------
     * js基础 ：去看以下，大概理解
     * 前后端数据的传递
     * 验证码的实现方式
     *
     */
    /**
     * 2021-11-16 登陆
     * 1.判断验证码是否正确
     * 2.判断用户名和密码是否正确
     * -------------------------------
     * 手写JDBC
     *------------------------
     * 1.写页面
     * 2.写js  判断用户是否输入正确，进入后台的ajax ，根据返回的结果判断执行什么代码
     * 3.servlet   六件事情
     * 4.service  逻辑判断 （验证码和用户名+密码）
     * 5.dao    sql语句，对查询出来的值进行封装到需要的对象数据里面
     * 6.JDBC代码 连接数据库和得到结果集
     */
    /**
     * 2021-11-17
     * 1.jdbc 解析结果集
     * 2.jdbc 代码编写步骤
     * 3.jdbc 注意事项容易报错的地方
     * while循环 ，一般用于不知道有多少条数据，或者死循环
     * 如果是for循环  for(int i=0;i<length;i++)
     * -------------------------------
     * 4.页面之间相互传值
     *      1）通过get方法进行传值
     *      url参数拼接
     *      2）通过js拿到url地址
     *      3）怎么解析地址
     *      4）字符串转换为数组的方法   url.split('?');
     *      5）拿到数组里面的值 arrayUrl[1];
     *      6）数组遍历
     *      7）判断 if (keyArray[0] == 'name') 值是否是我们需要的数据
     *      8）直接赋值document.getElementById("loginName").innerHTML = keyArray[1];
     *      2)通过session和local传值
     * 5.时间显示   时间格式化
     * 6.定时器 setInterval
     * 7.每一个页面只能由一个id，id名称不能重复
     * ----------------------------------------
     * 你们来我们这里：提升项目经验
     * 模仿   能够根据我的代码进行相应功能的输出
     * 僵化  ---一比一模仿
     * 固化  ---将知识点固化到自己脑海里
     * 优化  ----对以前的只是进行优化
     * ------------------------------------------------
     *
     *
     */
    /**
     * 2021/11/18
     * 前端的思路：
     * 1.html 复制html
     * 2.写js   查询所有
     *      1）页面加载完成执行里面的代码
     *      2）通过ajax查询后台数据得到数据data
     *      3）通过data赋值到tbody
     * ------------------------------------------------
     * 后台的思路：
     * 1.servlet
     *      六件事情
     *      1)乱码处理
     *      2）得到前端的值  有可能会多个值
     *      3）将值封装成对象
     *      4）将值传递给服务逻辑层
     *      5）得到服务逻辑层返回的值
     *      6）将返回的值传递给前端
     * 2.service   封装到ResultModel 掉用dao层查询数据库
     * 3.dao   查询数据库 ：
     *          1.编写sql语句，
     *          2.得到结果集，
     *          3.解析结果集
     *          4.返回数据
     * ----------------------------------
     * 前端赋值
     * 1.拿到后台的数据 res.data
     *      success: function (res) {
     *             console.log(res);
     *             setList(res.data);
     * 2.修改for循环里面的循环条件     for (let i = 0; i < data.length; i++) {
     * 3.对html里面的值进行字符串拼接 ' + data[i].id + '
     * 4.对有空值的进行替换：三元运算符 ' + (data[i].sex == undefined ? '' : data[i].sex) + '
     * 5.对我们的状态：
     *      1）html显示  ' + (data[i].enable == 1 ? '已启用' : '已停用') + '
     *      2）css显示   ' + (data[i].enable == 1 ? '' : 'layui-btn-disabled') + '
     *      3）图标的显示  ' + (data[i].enable == 1 ? '&#xe601;' : '&#xe62f;') + '
     *      4）鼠标移上去显示 title属性   title="' + (data[i].enable == 1 ? '启用' : '停用') + '"
     * -----------------------------------------------------------------------------------------
     * 删除：
     * 前端：
     *      1.html
     *      2.js  添加删除的ajax
     * 后台：
     *      1.servlet 六件事情
     *      2.service
     *      3.dao
     *      (4.jdbc 添加了一个更新方法)
     *  前端赋值：
     *          $(obj).parents("tr").remove();
     */
    /**
     * 2021/11/24 新增
     * 1.写页面
     * 2.将需要的表单数据 进行正则表达式验证
     * 3.将所有的数据得到封装到data，特别是复选框
     * 4.提取公共的ajax  统一调用
     * 根据返回的值进行逻辑判断是否新增成功
     * -----------------------------------
     * 5.servlet
     *      日期调用
     *      密码加密
     *      空和""的整型转换
     *      其他字段为null的情况
     * 6.service
     * 7.dao    sql语句
     *
     *
     */

    /**
     * 2021-11-25 编辑
     * 1.通过查询所有拿到当前的id
     * 2.通过id查询数据库
     * 3.根据查询出来的数据将数据填充到编辑页面
     * 4.点击修改按钮进行提交---修改的sql语句
     * -----------------------------------------------
     * 根据id查询
     * 编辑
     * 动态表格查询
     * 操作栏
     * 状态栏
     * -----------------
     */
    /**
     * 2021-11-26 后台代码测试
     * postman
     * 码表
     * 1 启用
     * 2 禁用
     * 3 停用
     * --------------------------------------------
     * 将后台关于对象所有的代码全部实现  （包括模糊查询）
     * 六个公用的CRUD操作代码进行实现 通过postman进行测试
     * 1.servlet 六个类
     * 2.service  六个方法
     * 3.dao    六个方法  sql语句
     */
    /**
     * 2021-11-29 产品
     * 1.页面
     * 2.js
     * 3.后台：
     *      1）servlet
     *      2）service
     *      3)dao
     *-------------------------------------------
     * 文件上传 前端js
     * 后台：代码
     *
     */
    /**
     * 2021-11-30 富文本
     */
    /**
     * 2021-12-1 安全认证
     * 1.前端：只要判断当前session里面没有保持当前用户信息，则提示重新登录
     * 2.后端：用户直接调用接口时判断是否已经登录
     * ---------------------------------------------
     * 前端页面网站首页
     * 公司介绍和导航的页面赋值
     *
     *
     */

    /**
     * 2021-12-3
     * 首页点击产品跳转到产品详细页面（需要将当前的产品id传递过去）
     * 在详细页面根据id查询出三条数据，分别对应赋值
     * ---------------------------------------------------
     * 对于点击菜系进行相应的查询
     * 1.直接点击导航的产品查询，默认菜系id为0，查询所有的前八条
     * 2.如果点击菜系，则将菜系id得到，直接根据菜系id查询
     * 3.如果有分页，可以用layui的分页，可以直接将页码和每一页显示的条数赋值一个全局变量
     * 4.然后再通过查询产品取后台查询
     * 注意：取后台查询，永远需要三个参数{page: page, limit: limit, cuisineId: cuisineId};
     *
     *
     */
}
